競プロ典型 90 問 008
(工事中)
解き方
解答例
下は上記の方法で解いたときの提出結果である。また、その提出の際に提出したソースコードをその下に転記する。
code: C
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main () {
int n = 0;
int res = 0;
long long mod_n = 1000000007;
res = scanf("%d", &n);
res = scanf("%s", s);
for (int i = 0; i < n; i++) {
case 'a':
ans0 = (ans0 + 1) % mod_n; break;
case 't':
ans1 = (ans1 + ans0) % mod_n; break;
case 'c':
ans2 = (ans2 + ans1) % mod_n; break;
case 'o':
ans3 = (ans3 + ans2) % mod_n; break;
case 'd':
ans4 = (ans4 + ans3) % mod_n; break;
case 'e':
ans5 = (ans5 + ans4) % mod_n; break;
case 'r':
ans6 = (ans6 + ans5) % mod_n; break;
}
}
return 0;
}
私の提出一覧
table: submissions_atcoder_typical90_008
提出のURL 提出時刻 結果 備考
感想
ローカルにおいてあったzakkan.txt(雑感)に書かれていたこと
改めて見てみると、珍しくswitch 文を使っているな、、、いまならa 以外はまとめるかな、a もまとめられるか
008 - AtCounter(★4)
日時: 2021-05-03 17:35:56
前の問題でqsort に使った比較関数が残っているが
ただの消し忘れであり、今回の問題には不要。
今回は動的計画法だが、1つ前のstep の値しか参照せず、
各step で更新される値は1つだけであることから、
現在の結果のみを保持しておくだけでも良い。
当時の自分は無意識だったと思うが、私の解答も
そのような形になっている。
むしろ過去の履歴を保持せずに書くのが癖になっているのか
現在の値だけ保持しておく形ではうまく更新できないことに
後から気づいて修正することがあるので気をつけたい